iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 1
0
自我挑戰組

今晚我想來點 Ruby on Rails 系列 第 1

<Day 1> 思考的像一個 Programmer

  • 分享至 

  • xImage
  •  

如何把人的邏輯轉換到電腦邏輯

如何建立自己的程式?

該從何下手?

首先開始計劃 ruby 專案,先思考自己想做什麼?這個專案要做什麼?可以先從一些簡單的東西開始,當知道想做什麼的時候,可以把步驟用簡單的話記錄下來,例如說你有一個裝滿mp3檔的資料夾然後想要依照檔案大小排列。

之前寫下的步驟可能是這樣:

1.把 mp3 檔的資料放進陣列
2.依照檔案大小排列
3.印出排列好的陣列

也許這不是做完美的做法但是沒關係,誰叫我菜。
現在就可以透過改善這些步驟當作練習。

現在發揮一些創意把你在 ruby 所學將這些步驟轉換成程式碼。試著將這些步驟換成問句,像這樣:

如何從 ruby 拿到這些檔案?
如何排序陣列?
如何找到檔案大小?

不知道怎麼做到以上這些步驟的話,去問 google

有效率的解決問題小技巧

試著多讀幾次直到能夠完全理解:

  • 開始一個專案
  • 確認你瞭解問題後並嘗試解決
  • 如果程式沒有起作用嘗試閱讀錯誤碼,通常錯誤碼都會有提示可以幫助你找到錯誤的地方在哪
  • 建立一個解決方案,請一步一步來
  • 可以透過陣列、字串或雜湊解決暫存資料的問題
  • 寫程式就像是汽車工廠,每一步都專注做一件事,每完成一步都離完成品更接近,廢話
  • 把大的步驟分差成許多小步驟
  • 記住先前的練習並試著將那些練習轉換成你的經驗
  • 運用 irb 可以發揮你的優勢並且可以獨立測試
  • ”徹底了解“,找出如何解決某個問題方法然後產生出一個解決方法的迴圈
  • 如果你直接去跑程式碼,你可以提早發現錯誤
  • 你不應該去了解所有的東西。用 google 查詢解決辦法或看 ruby 文件就算你有多年經驗都會是你工作的一部分,請習慣。
  • 細節很重要!少一個括弧、一個錯誤或是少了正確的資料形式都會讓你的程式碼無法運作,通常跟你想像的一樣
  • 如何掌握錯誤訊息
  • 出現錯誤訊息是非常正常的一件事,錯誤訊息是來幫助你的,他是好人只是一直被誤會
  • 大多數時間錯誤碼都會告訴你要怎麼解決問題

有兩件事你會想要在錯誤訊息裡面找到:

  1. 錯誤是發生在哪
  2. 你要處理的是什麼樣的錯誤

如果看到像是這樣的錯誤訊息:

exception.rb:7:in 'bar': undefined local variable or method 'bacon'
    from exception.rb:3:in 'foo'
    from exception.rb:10:in 'main'

這個錯誤訊息是在說錯誤發生在 exception.rb 的第七行。就從這裡下手解決問題吧。

也會發現像是這樣的錯誤訊息類型:

undefined local variable or method 'bacon'

意思是說你試著使用名稱為 bacon 的變數或方法,但是 ruby 找不到。有可能是你打錯字或是你根本忘了建立這個變數。

還有其他常見的錯誤訊息會長這樣:

undefined method `foo` for nil:NilClass (NoMethodError)

這個也很常發生因為你試著在 nil 呼叫方法,當程式找不到你想要的東西的時候,許多的 ruby 指令都會回傳這個值給你。假設說你有一個陣列:

letters = ['a', 'b', 'c']

如果你想要從陣列中取得一個無效的值:

letters[5]

ruby 會允許你這樣做,但是你會得到一個 nil。然後你試著用這個值做些什麼:

letters[5].foo

就會得到一個 undefined method 錯誤訊息跟先前看到的一樣。另一個解決辦法就是在執行程式的時候先判斷是否為 nil 像這樣

if letters[5]
  letters[5].foo
end

如果你發現其他你不懂的錯誤,就把錯誤訊息丟到 google ,透過查詢關鍵字你也會找到一些提示或方法告訴你如何解決。

尋找 ruby 方法

當你試著將之前的步驟轉換成程式碼,通常就會知道你該做什麼事。像是說如果你是從一個字串開始,那字串方法應該就會非常有幫助。如果是從陣列開始那陣列方法就會是你想要查詢的方向。你可以在 ruby 文件裡找到所有可行的方法。

例如說如果有一個字串 “a,b,c,d” 然後想要把陣列拆開而且沒有逗號。那查詢的方向就會像是字串的 split 方法,一個快速的測試方法就是使用 irb。如果你不知道有什麼方法可以使用可以先去查那個物件的類別是什麼再用關鍵字下去查,例如這樣:

"apple".class

字串

當在處理字串的時候,但想要用陣列的方式下去做或是你正在處理整數但你想要用個別數字處理下面這些轉換的方法你都可以交替使用:

to_i	String -> Integer
to_s	Integer -> String
chars	String -> Array (individual characters)
split	String -> Array (split by spaces by default)
join	Array -> String (join without spaces)

split & join 接受一個可選擇的參數,你可以用特定的符號分開或結合字串,如下:

"a-b-c".split("-")
# ["a", "b", "c"]

Ruby 套件

有時候你想要做的事情可能會比分拆或結合字串複雜許多,像是從網路上下載圖片或資料,那你可能就會想要找套件來用了。 ruby 套件就像是小型的 ruby 應用程式可以套用在你的程式裡面可以幫助你做到某些事。

例如:

Nokogiri 幫助你閱讀 html 程式碼取出更多資訊。
Thor 幫助你撰寫命令行應用程式
RSpec & Minitest 幫助你撰寫測試檢查程式是否正確運行

你不一定需要這些套件,但是套件可以幫你省下很多時間。


下一篇
<Day 2> 什麼是 ruby 的變數 ?
系列文
今晚我想來點 Ruby on Rails 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言